﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Collections;
using System.Threading;

namespace CemaatVakti
{
    public partial class MainForm : Form
    {
        #region Interop Constants

        private const int WM_QUERYENDSESSION = 0x11;

        public struct SystemTime
        {
            public ushort Year;
            public ushort Month;
            public ushort DayOfWeek;
            public ushort Day;
            public ushort Hour;
            public ushort Minute;
            public ushort Second;
            public ushort Millisecond;
        }
        [DllImport("kernel32.dll", EntryPoint = "GetSystemTime", SetLastError = true)]
        public extern static void Win32GetSystemTime(ref SystemTime sysTime);

        [DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
        public extern static bool Win32SetSystemTime(ref SystemTime sysTime);

        #endregion

        private bool endSessionPending;
        private ArrayList Vakitler;

        TaskbarNotifier taskbarNotifier;

        public MainForm()
        {
            InitializeComponent();
            InitializeTaskbarNotifier();
            Vakitler = new ArrayList();
            this.Text += " " + Globals.version;
            AyarlariYukle();
            UpdateKontrol();
            //setSystemDate();
            NamazVakitleriniGetir();
            //Helpers.AcilistaCalistir();
            // Create the delegate for the Timer type. 
            //TimerCallback namazCB = new TimerCallback(VakitKontrol);

            //// Configuring timer settings. 
            //System.Threading.Timer t = new System.Threading.Timer(
            //           namazCB,       // The TimerCallback delegate type.
            //           null,// Any info to pass into the method called.
            //             0,        //  Time to wait before starting.
            //            60000);    // Dakikada 1 kontrol edecek.
            timerVakitKontrol.Start();
        }

        private void UpdateKontrol()
        {
            if (Helpers.HasUpdates())
            {
                MessageBox.Show("Cemaat Vakti programı için yeni bir güncelleme var. Websayfanıza yönlendiriliyorsunuz.", "Program Güncellemesi", MessageBoxButtons.OK, MessageBoxIcon.Information);
                System.Diagnostics.Process.Start(Globals.newVersonURL);
                Application.Exit();
            }
        }

        private void InitializeTaskbarNotifier()
        {
            taskbarNotifier = new TaskbarNotifier();
            taskbarNotifier.SetBackgroundBitmap(global::CemaatVakti.Properties.Resources.cm, Color.FromArgb(255, 0, 255));
            taskbarNotifier.SetCloseBitmap(global::CemaatVakti.Properties.Resources.close, Color.FromArgb(255, 0, 255), new Point(180, 8));
            taskbarNotifier.TitleRectangle = new Rectangle(70, 9, 150, 40);
            taskbarNotifier.ContentRectangle = new Rectangle(8, 40, 180, 80);
            taskbarNotifier.KeepVisibleOnMousOver = true;
            taskbarNotifier.ReShowOnMouseOver = true;
            taskbarNotifier.CloseClickable = true;
            taskbarNotifier.TitleClickable = false;
            taskbarNotifier.ContentClickable = false;
            taskbarNotifier.EnableSelectionRectangle = false;
            //taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);
        }

        // Pazartesiye yetişsin diye çok kötü bir kod çıktı düzeltmek gerekli :)  
        private void VakitKontrol(object state)
        {
            DateTime Simdi = DateTime.Parse(DateTime.Now.ToString("HH:mm"));
            if (Vakitler != null)
            {
                DateTime imsakSuresi = DateTime.Parse(((Vakit)Vakitler[0]).NamazSaati.ToString("HH:mm"));
                //DateTime gunesSuresi = DateTime.Parse(((Vakit)Vakitler[1]).NamazSaati.ToString("HH:mm"));
                DateTime ogleSuresi = DateTime.Parse(((Vakit)Vakitler[2]).NamazSaati.ToString("HH:mm"));
                DateTime ikindiSuresi = DateTime.Parse(((Vakit)Vakitler[3]).NamazSaati.ToString("HH:mm"));
                DateTime aksamSuresi = DateTime.Parse(((Vakit)Vakitler[4]).NamazSaati.ToString("HH:mm"));
                DateTime yatsiSuresi = DateTime.Parse(((Vakit)Vakitler[5]).NamazSaati.ToString("HH:mm"));


                // İmsak Vakti
                if (imsakSuresi.Equals(Simdi) && Globals.NotificationsActive) // İmsak vakti abdest uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 0 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.AbdestMesaj, Globals.AbdestBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);
                    }
                }
                else if (imsakSuresi.AddMinutes(10).Equals(Simdi) && Globals.NotificationsActive) // İmsak vakti cemaat uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 1 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.NamazMesaj, Globals.NamazBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (ogleSuresi.AddMinutes(-15).Equals(Simdi) && Globals.NotificationsActive) // İmsak vakti bitiş uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 2 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (ogleSuresi.Equals(Simdi) && Globals.NotificationsActive) // Öğle namazı vakti abdest uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 0 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.AbdestMesaj, Globals.AbdestBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);

                    }
                }
                else if (ogleSuresi.AddMinutes(10).Equals(Simdi) && Globals.NotificationsActive) // Öğle namazı vakti cemaat uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 1 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.NamazMesaj, Globals.NamazBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (ikindiSuresi.AddMinutes(-15).Equals(Simdi) && Globals.NotificationsActive) // Öğle namazı vakti bitiş uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 2 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (ikindiSuresi.Equals(Simdi) && Globals.NotificationsActive) // İkindi namazı vakti abdest uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 0 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.AbdestMesaj, Globals.AbdestBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);
                    }
                }
                else if (ikindiSuresi.AddMinutes(10).Equals(Simdi) && Globals.NotificationsActive) // İkindi namazı vakti cemaat uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 1 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.NamazMesaj, Globals.NamazBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (aksamSuresi.AddMinutes(-15).Equals(Simdi) && Globals.NotificationsActive) // İkindi namazı vakti bitiş uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 2 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (aksamSuresi.Equals(Simdi) && Globals.NotificationsActive) // Akşam namazı vakti abdest uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 0 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.AbdestMesaj, Globals.AbdestBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);
                    }
                }
                else if (aksamSuresi.AddMinutes(10).Equals(Simdi) && Globals.NotificationsActive) // Akşam namazı vakti cemaat uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 1 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.NamazMesaj, Globals.NamazBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (yatsiSuresi.AddMinutes(-15).Equals(Simdi) && Globals.NotificationsActive) // Akşam namazı vakti bitiş uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 2 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, 500, 10000, 500);
                    }
                }
                else if (yatsiSuresi.Equals(Simdi) && Globals.NotificationsActive) // Yatsı namazı vakti abdest uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 0 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.AbdestMesaj, Globals.AbdestBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);
                    }
                }
                else if (yatsiSuresi.AddMinutes(10).Equals(Simdi) && Globals.NotificationsActive) // Yatsı namazı vakti cemaat uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 1 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.NamazMesaj, Globals.NamazBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (imsakSuresi.AddMinutes(-15).Equals(Simdi) && Globals.NotificationsActive) // Yatsı namazı vakti bitiş uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 2 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
            }
        }

        delegate void ShowNotificationCallback(int statusCode);
        private void ShowNotificationMessage(int statusCode)
        {
            if (statusCode == 0) // Abdest Uyarısı
            {
                MessageBox.Show(Globals.AbdestMesaj, Globals.AbdestBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);
            }
            else if (statusCode == 1) // Namaz Uyarısı
            {
                MessageBox.Show(Globals.NamazMesaj, Globals.NamazBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
            }
            else // Vakit geçiyor uyarısı
            {
                MessageBox.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
            }
        }

        private void AyarlariYukle()
        {
            try
            {
                Globals.AbdestBaslik = Helpers.getSetting("AbdestBaslik");
                Globals.AbdestMesaj = Helpers.getSetting("AbdestMesaj");
                Globals.VakitGeciyorMesaj = Helpers.getSetting("VakitGeciyorMesaj");
                Globals.VakitGeciyorBaslik = Helpers.getSetting("VakitGeciyorBaslik");
                Globals.NamazBaslik = Helpers.getSetting("NamazBaslik");
                Globals.NamazMesaj = Helpers.getSetting("NamazMesaj");
                Globals.SyncTime = Convert.ToBoolean(Helpers.getSetting("SyncTime"));
                Globals.StartWithWindows = Convert.ToBoolean(Helpers.getSetting("StartWithWindows"));
                Globals.NotificationsActive = Convert.ToBoolean(Helpers.getSetting("NotificationsActive"));
                Globals.NamazURL = Helpers.getSetting("NamazURL");
                Globals.UpdateURL = Helpers.getSetting("UpdateURL");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ayar dosyasında problem var. Lütfen programı tekrar kurunuz.", "Ayar Dosyasında Problem Var", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void NamazVakitleriniGetir()
        {
            try
            {
                Vakitler = Helpers.parseNamazVakitleri();
                tarihLabel.Text = DateTime.Now.ToShortDateString();
                if (Vakitler != null)
                {
                    labelInternetBaglantiError.Visible = false;
                    timerInternetBaglantisi.Stop();
                    imsakLabel.Text = ((Vakit)Vakitler[0]).NamazSaati.ToString("HH:mm");
                    gunesLabel.Text = ((Vakit)Vakitler[1]).NamazSaati.ToString("HH:mm");
                    ogleLabel.Text = ((Vakit)Vakitler[2]).NamazSaati.ToString("HH:mm");
                    ikindiLabel.Text = ((Vakit)Vakitler[3]).NamazSaati.ToString("HH:mm");
                    aksamLabel.Text = ((Vakit)Vakitler[4]).NamazSaati.ToString("HH:mm");
                    yatsiLabel.Text = ((Vakit)Vakitler[5]).NamazSaati.ToString("HH:mm");
                }
                else
                {
                    if (labelInternetBaglantiError.Visible == false)
                        MessageBox.Show("İnternet bağlantınızda sorun yaşanmaktadır.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    labelInternetBaglantiError.Visible = true;
                    timerInternetBaglantisi.Start();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("İnternet bağlantınızda sorun yaşanmaktadır.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Error);
                labelInternetBaglantiError.Visible = false;
                timerInternetBaglantisi.Start();
            }
        }

        private void setSystemDate()
        {
            try
            {
                if (Convert.ToBoolean(Helpers.getSetting("SyncTime")))
                {
                    DateTime serverDateTime = Helpers.sunucuSaatiniGetir();

                    SystemTime currentTime = new SystemTime();
                    Win32GetSystemTime(ref currentTime);

                    // UTC time; it will be modified according to the regional settings of the target computer so the actual hour might differ
                    currentTime.Year = (ushort)serverDateTime.Year;
                    currentTime.Month = (ushort)serverDateTime.Month;
                    currentTime.Day = (ushort)serverDateTime.Day;
                    if ((serverDateTime.Month > 3 || serverDateTime.Month < 11))
                        currentTime.Hour = (ushort)(serverDateTime.Hour - 3); // GMT +3 patch
                    else
                        currentTime.Hour = (ushort)(serverDateTime.Hour - 2); // GMT +2 patch
                    currentTime.Minute = (ushort)serverDateTime.Minute;
                    currentTime.Second = (ushort)serverDateTime.Second;

                    // Call the unmanaged function that sets the new date and time instantly
                    Win32SetSystemTime(ref currentTime);
                }
            }
            catch (Exception ex)
            {
            }
        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_QUERYENDSESSION)
                endSessionPending = true;
            base.WndProc(ref m);
        }

        private void MainForm_Resize(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                MinimizeInTray();
            }
        }

        private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            ShowForm();
        }

        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (endSessionPending)
            {
                // The session is ending
                e.Cancel = false;
            }
            else
            {
                e.Cancel = true;
                MinimizeInTray();
            }
            base.OnClosing(e);
        }

        private void MinimizeInTray()
        {
            notifyIcon.Visible = true;
            this.Hide();
            this.ShowInTaskbar = false;
            //this.WindowState = FormWindowState.Minimized;            
        }

        private void ShowForm()
        {
            this.Show();
            notifyIcon.Visible = false;
            this.ShowInTaskbar = true;
            this.WindowState = FormWindowState.Normal;
        }

        private void cikisMenuStrip_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void ayarlarButton_Click(object sender, EventArgs e)
        {
            AyarForm ayarForm = new AyarForm();
            ayarForm.ShowDialog();
        }

        private void simgeOlarakKucultButton_Click(object sender, EventArgs e)
        {
            MinimizeInTray();
        }

        private void gosterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ShowForm();
        }

        private void uyarilariKapatToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Globals.NotificationsActive)
            {
                Globals.NotificationsActive = false;
                Helpers.writeSetting("NotificationsActive", Boolean.FalseString);
                uyarilariKapatToolStripMenuItem.Text = "Uyarıları Aktif Et";
            }
            else
            {
                Globals.NotificationsActive = true;
                Helpers.writeSetting("NotificationsActive", Boolean.TrueString);
                uyarilariKapatToolStripMenuItem.Text = "Uyarıları Kapat";
            }
        }

        private void hakkindaButton_Click(object sender, EventArgs e)
        {
            AboutForm aboutForm = new AboutForm();
            aboutForm.ShowDialog();
        }

        private void hakkindaStripMenuItem_Click(object sender, EventArgs e)
        {
            AboutForm aboutForm = new AboutForm();
            aboutForm.ShowDialog();
        }

        private void timerInternetBaglantisi_Tick(object sender, EventArgs e)
        {
            UpdateKontrol();
            //setSystemDate();
            NamazVakitleriniGetir();
        }

        private void timerVakitKontrol_Tick(object sender, EventArgs e)
        {
            DateTime Simdi = DateTime.Parse(DateTime.Now.ToString("HH:mm"));
            if (Vakitler != null)
            {
                DateTime imsakSuresi = DateTime.Parse(((Vakit)Vakitler[0]).NamazSaati.ToString("HH:mm"));
                //DateTime gunesSuresi = DateTime.Parse(((Vakit)Vakitler[1]).NamazSaati.ToString("HH:mm"));
                DateTime ogleSuresi = DateTime.Parse(((Vakit)Vakitler[2]).NamazSaati.ToString("HH:mm"));
                DateTime ikindiSuresi = DateTime.Parse(((Vakit)Vakitler[3]).NamazSaati.ToString("HH:mm"));
                DateTime aksamSuresi = DateTime.Parse(((Vakit)Vakitler[4]).NamazSaati.ToString("HH:mm"));
                DateTime yatsiSuresi = DateTime.Parse(((Vakit)Vakitler[5]).NamazSaati.ToString("HH:mm"));


                // İmsak Vakti
                if (imsakSuresi.Equals(Simdi) && Globals.NotificationsActive) // İmsak vakti abdest uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 0 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.AbdestMesaj, Globals.AbdestBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);
                    }
                }
                else if (imsakSuresi.AddMinutes(10).Equals(Simdi) && Globals.NotificationsActive) // İmsak vakti cemaat uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 1 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.NamazMesaj, Globals.NamazBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (ogleSuresi.AddMinutes(-15).Equals(Simdi) && Globals.NotificationsActive) // Öğle vakti bitiş uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 2 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.VakitGeciyorBaslik, Globals.VakitGeciyorMesaj, 500, 10000, 500);
                    }
                }
                else if (ogleSuresi.Equals(Simdi) && Globals.NotificationsActive) // Öğle namazı vakti abdest uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 0 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.AbdestMesaj, Globals.AbdestBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);

                    }
                }
                else if (ogleSuresi.AddMinutes(10).Equals(Simdi) && Globals.NotificationsActive) // Öğle namazı vakti cemaat uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 1 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.NamazMesaj, Globals.NamazBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (ikindiSuresi.AddMinutes(-15).Equals(Simdi) && Globals.NotificationsActive) // İkindi namazı vakti bitiş uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 2 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.VakitGeciyorBaslik, Globals.VakitGeciyorMesaj, 500, 10000, 500);
                    }
                }
                else if (ikindiSuresi.Equals(Simdi) && Globals.NotificationsActive) // İkindi namazı vakti abdest uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 0 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.AbdestMesaj, Globals.AbdestBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);
                    }
                }
                else if (ikindiSuresi.AddMinutes(10).Equals(Simdi) && Globals.NotificationsActive) // İkindi namazı vakti cemaat uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 1 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.NamazMesaj, Globals.NamazBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (aksamSuresi.AddMinutes(-15).Equals(Simdi) && Globals.NotificationsActive) // Akşam namazı vakti bitiş uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 2 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.VakitGeciyorBaslik, Globals.VakitGeciyorMesaj, 500, 10000, 500);
                    }
                }
                else if (aksamSuresi.Equals(Simdi) && Globals.NotificationsActive) // Akşam namazı vakti abdest uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 0 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.AbdestMesaj, Globals.AbdestBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);
                    }
                }
                else if (aksamSuresi.AddMinutes(10).Equals(Simdi) && Globals.NotificationsActive) // Akşam namazı vakti cemaat uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 1 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.NamazMesaj, Globals.NamazBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (yatsiSuresi.AddMinutes(-15).Equals(Simdi) && Globals.NotificationsActive) // Yatsı namazı vakti bitiş uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 2 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, 500, 10000, 500);
                    }
                }
                else if (yatsiSuresi.Equals(Simdi) && Globals.NotificationsActive) // Yatsı namazı vakti abdest uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 0 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.AbdestMesaj, Globals.AbdestBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.AbdestBaslik, Globals.AbdestMesaj, 500, 10000, 500);
                    }
                }
                else if (yatsiSuresi.AddMinutes(10).Equals(Simdi) && Globals.NotificationsActive) // Yatsı namazı vakti cemaat uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 1 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.NamazMesaj, Globals.NamazBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.NamazBaslik, Globals.NamazMesaj, 500, 10000, 500);
                    }
                }
                else if (imsakSuresi.AddMinutes(-15).Equals(Simdi) && Globals.NotificationsActive) // İmsak namazı vakti bitiş uyarısı
                {
                    // Farklı thread içinden erişmeye çalışıyorsa delegate üzerinden invoke gerekiyor.
                    if (this.taskbarNotifier.InvokeRequired)
                    {
                        ShowNotificationCallback d = new ShowNotificationCallback(ShowNotificationMessage);
                        this.Invoke(d, new object[] { 2 });
                    }
                    else
                    {
                        MessageBox.Show(Globals.VakitGeciyorMesaj, Globals.VakitGeciyorBaslik, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        taskbarNotifier.Show(Globals.VakitGeciyorBaslik, Globals.VakitGeciyorMesaj, 500, 10000, 500);
                    }
                }
            }
        }
    }
}
